﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using EvertonApp.Transporte;

namespace EvertonApp.Data
{
    class TestNoticiasRepository : IRepository<Noticia>
    {
        public static Usuario _usuario = new Usuario
        {
            IdUsuario = Guid.NewGuid(),
            Nombre = "Admin",
            Email = "admin@gmail.com",
            Password = "45678"
        };


        private static List<Noticia> _noticias = new List<Noticia> {
                                                    new Noticia {IdHilo = Guid.NewGuid(), Titulo = "Noticia1", Descripcion = "Primer Noticia", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0},
                                                    new Noticia {IdHilo = Guid.NewGuid(), Titulo = "Noticia2", Descripcion = "Segundo Noticia", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0}, 
                                                    new Noticia {IdHilo = Guid.NewGuid(), Titulo = "Noticia3", Descripcion = "Tercer Noticia", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0}};


        #region Implementation of IRepository<noticia>

        public Noticia Insert(Noticia entity)
        {
            _noticias.Add(entity);
            entity.IdHilo = Guid.NewGuid();
            return entity;
        }

        public bool Delete(Noticia entity)
        {
           return _noticias.Remove(entity);
        }

        public bool Update(Guid id, Noticia entity)
        {
            Noticia noticia = _noticias.FirstOrDefault(o => o.IdHilo == id);
            if (noticia != null)
            {
                noticia.IdHilo = entity.IdHilo;
                noticia.Titulo = entity.Titulo;
                noticia.Descripcion = entity.Descripcion;
                noticia.CreadoPor = entity.CreadoPor;
                noticia.Editado = entity.Editado;
                noticia.FechaCreacion = entity.FechaCreacion;
            }else
            {
                return false;
            }
            return true;
        }

        public IQueryable<Noticia> SearchFor(Expression<Func<Noticia, bool>> predicate)
        {
            var collection = _noticias.AsQueryable();

            return collection.Where(predicate);
        }

        public IQueryable<Noticia> GetAll()
        {
            return _noticias.AsQueryable();
        }

        public Noticia GetById(Guid id)
        {
            return _noticias.Single(o => o.IdHilo == id);
        }

        #endregion
    }
}
